# shellcheck shell=sh
# shellcheck disable=SC2034

# ferreus_orbit Plugins for Lenovo "ThinkSystem SR665"

fo_load_storcli

fo_get_sorted_name(){
  id=$(fo_get_id)
  if [ "$USE_FO_NAME" -eq 1 ] || [ "$1" = "-f" ]; then
    echo "Disk$((id - 2))"
  else
    echo "sd$(fo_get_dev_letter "${id}")"
  fi
}

fo_get_did(){
  num=$(echo "$ID_PATH" | cut -d- -f4| cut -d: -f3)
  if [ "$(echo "$ID_MODEL"|cut -d_ -f1)" = "RAID" ]; then
    if [ "$fo_raid_card" = "RAID 940-16i 4GB Flash" ]; then
      jq -r ".\"JBOD LIST\"|select(.!=null)[]|select(.ID==${num}).DID" "${FO_CACHE_FILE_STORCLI}"
    else
      echo $(( num - 1 ))
    fi
  else
#      vd=$(echo "$num" | cut -d: -f3)
      dg=$(jq -r ".\"VD LIST\"|select(.!=null)[]|select(.\"DG/VD\"|endswith(\"/${num}\")).\"DG/VD\"" "${FO_CACHE_FILE_STORCLI}"| cut -d'/' -f1)
      jq -r ".TOPOLOGY|select(.!=null)[]|select(.DG==${dg})|select(.Type==\"DRIVE\").DID" "${FO_CACHE_FILE_STORCLI}"
  fi
}

fo_get_id(){
  host=$(echo "$DEVPATH" | cut -d/ -f6)
  if [ "${host}" = "host0" ];then
    scsi=$(echo "$DEVPATH" | cut -d/ -f8)
     if [ "$(echo "$ID_MODEL"|cut -d_ -f1)" != "RAID" ]; then
      sg=$(ls "/sys/class/scsi_disk/${scsi}/device/scsi_generic")
      sc=$(echo "${sg}"|awk -F 'sg' '{print $2}')
       id=$((sc + 1))
    else
      vd=$(echo "$scsi" | cut -d: -f3)
      dg=$(jq -r ".\"VD LIST\"|select(.!=null)[]|select(.\"DG/VD\"|endswith(\"/${vd}\")).\"DG/VD\"" "${FO_CACHE_FILE_STORCLI}"| cut -d'/' -f1)
      id=$(jq -r ".TOPOLOGY|select(.!=null)[]|select(.DG==${dg})|select(.Type==\"DRIVE\").\"EID:Slot\"" "${FO_CACHE_FILE_STORCLI}" | cut -d':' -f2)
      if [ "$id" -lt 16 ]; then
        id=$((id + 2))
      else
        id=$((id - 10))
      fi
     fi
  else
    scsi=$(echo "$DEVPATH" | cut -d/ -f9)
    sg=$(ls "/sys/class/scsi_disk/${scsi}/device/scsi_generic")
    sc=$(echo "${sg}"|awk -F 'sg' '{print $2}')
    id=$((sc - 17))
  fi
  echo "$id"
}

fo_get_kname(){
 if [ -n "$(jq -r ".\"JBOD LIST\"|select(.!=null)[]|select(.DID==${1})" "${FO_CACHE_FILE_STORCLI}")"  ]; then
    if [ "$fo_raid_card" = "RAID 940-16i 4GB Flash" ]; then
      id=$(jq -r ".\"JBOD LIST\"|select(.!=null)[]|select(.DID==${1}).ID" "${FO_CACHE_FILE_STORCLI}")
      ls "/sys/class/scsi_device/0:2:${id}:0/device/block" 2>/dev/null ||true
    else
      ls "/sys/class/scsi_device/0:0:${1}:0/device/block" 2>/dev/null ||true
    fi
  else
    dg=$(jq -r ".\"Drive ${2}\"|select(.!=null)[].DG" "${FO_CACHE_FILE_STORCLI}")
    vd=$(jq -r ".\"VD LIST\"|select(.!=null)[]|select(.\"DG/VD\"|startswith(\"${dg}/\")).\"DG/VD\"" "${FO_CACHE_FILE_STORCLI}"| cut -d'/' -f2)
    ${STORCLI} "/call/v${vd}" show all J | jq -r ".[][][].\"VD${vd} Properties\"|select(.!=null).\"OS Drive Name\"" |cut -d'/' -f3
  fi
}

FO_DEFAULT_RAID0=1

FO_DISPOSITION="""
HDD disposition (Front Panel)
__{UNDERSCORE}___{UNDERSCORE}___{UNDERSCORE}___{UNDERSCORE}__
|{Disk0}|{Disk3}|{Disk6}|{Disk9}|
|{SN_Disk0}|{SN_Disk3}|{SN_Disk6}|{SN_Disk9}|
|-{MINUS}-|-{MINUS}-|-{MINUS}-|-{MINUS}-|
|{Disk1}|{Disk4}|{Disk7}|{Disk10}|
|{SN_Disk1}|{SN_Disk4}|{SN_Disk7}|{SN_Disk10}|
|-{MINUS}-|-{MINUS}-|-{MINUS}-|-{MINUS}-|
|{Disk2}|{Disk5}|{Disk8}|{Disk11}|
|{SN_Disk2}|{SN_Disk5}|{SN_Disk8}|{SN_Disk11}|
¯¯{HIGHER}¯¯¯{HIGHER}¯¯¯{HIGHER}¯¯¯{HIGHER}¯¯

HDD disposition (Rear Panel):
__{UNDERSCORE}___{UNDERSCORE}___{UNDERSCORE}___{UNDERSCORE}__
|{Disk12}|{Disk13}|{Disk14}|{Disk15}|
|{SN_Disk12}|{SN_Disk13}|{SN_Disk14}|{SN_Disk15}|
¯¯{HIGHER}¯¯¯{HIGHER}¯¯¯{HIGHER}¯¯¯{HIGHER}¯¯

Attention: This arrangement is not safe !
"""

FO_TEXTILE="""


h3. HDD disposition (Front Panel)


|{Disk0}|{Disk3}|{Disk6}|{Disk9}|
|{Disk1}|{Disk4}|{Disk7}|{Disk10}|
|{Disk2}|{Disk5}|{Disk8}|{Disk11}|

h3. HDD disposition (Rear Panel):

|{Disk12}|{Disk13}|{Disk14}|{Disk15}|

h1. *Attention : This arrangement is not safe*
"""
fo_raid_card=$(jq -r '."Product Name"|select(.!=null)' "${FO_CACHE_FILE_STORCLI}")